package com.maxplus.study.chat;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;


@SuppressWarnings("WeakerAccess")
public abstract class ShaderImageView extends ImageView {

	private final static boolean DEBUG = false;
	private ShaderHelper pathHelper;

	public ShaderImageView(Context context) {
		super(context);
		setup(context, null, 0);
	}

	public ShaderImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		setup(context, attrs, 0);
	}

	public ShaderImageView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		setup(context, attrs, defStyle);
	}

	private void setup(Context context, AttributeSet attrs, int defStyle) {
		getPathHelper().init(context, attrs, defStyle);
	}

	protected ShaderHelper getPathHelper() {
		if (pathHelper == null) {
			pathHelper = createImageViewHelper();
		}
		return pathHelper;
	}

	protected abstract ShaderHelper createImageViewHelper();

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
		if (getPathHelper().isSquare()) {
			int width = getMeasuredWidth();
			int height = getMeasuredHeight();
			int dimen = Math.min(width, height);
			setMeasuredDimension(dimen, dimen);
		}
	}

	// Required by path helper
	@Override
	public void setImageBitmap(Bitmap bm) {
		super.setImageBitmap(bm);
		getPathHelper().onImageDrawableReset(getDrawable());
	}

	@Override
	public void setImageDrawable(Drawable drawable) {
		super.setImageDrawable(drawable);
		getPathHelper().onImageDrawableReset(getDrawable());
	}

	@Override
	public void setImageResource(int resId) {
		super.setImageResource(resId);
		getPathHelper().onImageDrawableReset(getDrawable());
	}

	@Override
	protected void onSizeChanged(int w, int h, int oldw, int oldh) {
		super.onSizeChanged(w, h, oldw, oldh);
		getPathHelper().onSizeChanged(w, h);
	}

	@Override
	public void onDraw(Canvas canvas) {
		if (DEBUG) {
			canvas.drawRGB(10, 200, 200);
		}

		if (!getPathHelper().onDraw(canvas)) {
			super.onDraw(canvas);
		}

	}

}